package bombita.modelo.Municiones;

import org.jdom2.Element;

import bombita.modelo.Interactuador;
import bombita.modelo.Interfaces.Danable;
import bombita.modelo.Obstaculos.Cemento;
import bombita.modelo.Obstaculos.Ladrillo;
import bombita.modelo.Obstaculos.NoPasarException;
import bombita.modelo.Obstaculos.Obstaculo;
import bombita.modelo.Personajes.Bombita;
import bombita.modelo.Personajes.Cecilio;
import bombita.modelo.Personajes.Lopez;
import bombita.modelo.Personajes.LopezVolador;
import bombita.modelo.Personajes.Personaje;

public class ExplosionNormal extends Explosion{
	private int miDanio;
	private boolean interactuo; // indica que hubo al menos una interaccion
	private boolean completoInteracciones; // indica que ya no debe seguir interactuando

	public ExplosionNormal(int unDanio){
		this.miDanio = unDanio;
		this.interactuo = false;
		this.completoInteracciones = false;
	}

	public ExplosionNormal() {}

	public void interactuarCon(Interactuador unaCosa){
		unaCosa.interactuarConExplosionNormal(this);
	}
	
	@Override
	public void recibirPulsoReloj(float tiempo) {
		super.recibirPulsoReloj(tiempo);
		if (interactuo) {
			completoInteracciones = true;
		}
	}
	
	private void danar(Danable unaCosa)
	{
		if (!completoInteracciones) {
			unaCosa.recibirDano(miDanio);
		}
		interactuo = true;
	}
	
	public void interactuarConCemento(Cemento unaCosa){
		this.danar(unaCosa);
	}

	public void interactuarConLadrillo(Ladrillo unaCosa){
		this.danar(unaCosa);
	}

	public void interactuarConObstaculo(Obstaculo unaCosa){
		this.danar(unaCosa);
	}
	
	public void interactuarConBombita(Bombita unaCosa){
		this.danar(unaCosa);
	}
	
	public void interactuarConCecilio(Cecilio unaCosa){
		this.danar(unaCosa);
	}
	
	public void interactuarConLopez(Lopez unaCosa){
		this.danar(unaCosa);
	}
	
	public void interactuarConLopezVolador(LopezVolador unaCosa){
		this.danar(unaCosa);
	}
	
	public void interactuarConPersonaje(Personaje unaCosa) throws NoPasarException{
		this.danar(unaCosa);
	}
	
	public static ExplosionNormal deserializar(Element nodo) throws Exception
	{
		return new ExplosionNormal();
	}
}